home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / com / computer / psion_ft / source.gfa / psion_ft.gfa (.txt) < prev    next >
Encoding:
GFA-BASIC Atari  |  1994-08-07  |  25.7 KB  |  1,016 lines

  1. ' #######################################################################
  2. ' Programm-Name       : PSION-File-Transfer / PSION_FT.PRG
  3. ' erstes Erstelldatum : 19.08.93  (Version 0.1)
  4. ' Art des Programmes  : Rechnerkopplung
  5. ' Autor               : Michael Weigand, Wiener Allee 139, 2300 Kiel 14
  6. ' Sprache             : GFA-Basic V3.5E
  7. ' ------------------------------------------------------------------------
  8. ' Hinweis             : Dieser Quellcode wird ohne jegliche Gew„hrleistung
  9. '                       im Mausnetz ver”ffentlicht.
  10. '                       Teile des Quelltextes drfen in eigenen Programmen
  11. '                       eingesetzt werden.
  12. '                       Jegliche kommerzielle Nutzung von PSION_FT oder
  13. '                       von Teilen dieser Software ist untersagt!
  14. ' ------------------------------------------------------------------------
  15. '
  16. $m60000
  17. ' --- Speicher reservieren:
  18. '
  19. ' --- fr gepatchte GFA3BLIB, hier wohl berflssig, da keine VDI_Ausgabe
  20. CLIP OFF
  21. '
  22. ' --- bin ich ein ACC oder ein PRG?
  23. IF LPEEK(BASEPAGE+&H24)=0
  24.   acc!=TRUE
  25.   '
  26.   ON BREAK CONT
  27.   '
  28.   ' ap_id&=DPEEK(LPEEK(GB+4)+4)
  29.   ap_id&=APPL_INIT()
  30.   ~MENU_REGISTER(ap_id&,"  PSION-FT")
  31.   '
  32. ELSE
  33.   acc!=FALSE
  34.   '
  35.   ON BREAK GOSUB rsc_ausgang               ! definierter Abbruch
  36.   ON ERROR GOSUB error
  37.   '
  38.   RESERVE 40000+18*1024
  39.   ' - 8kB sollten fr Variablen/Felder reichen
  40.   ' - 32 kB fr Fileselect,Alert,usw.
  41.   ' - 18*1024 Puffer bei HD
  42.   '
  43. ENDIF
  44. '
  45. windup_count&=0         ! Kontrolle der beg-update/end_update
  46. '
  47. ' Pfad fr RSC- und INF-Datei
  48. cur_drive&=FN getdrv
  49. path$=CHR$(cur_drive&+64)
  50. IF acc!
  51.   path$=path$+":\"      ! Hauptebene, wo sonst
  52. ELSE
  53.   path$=path$+":"+DIR$(0)
  54.   IF LEN(path$)=2
  55.     ' Hauptebene
  56.     path$=path$+"\"
  57.   ENDIF
  58.   IF RIGHT$(path$)<>"\"
  59.     path$=path$+"\"
  60.   ENDIF
  61. ENDIF
  62. '
  63. ' --- Message-Buffer
  64. DIM nachricht%(3)
  65. '
  66. @init
  67. '
  68. ' --- aus die Maus
  69. ~GRAF_MOUSE(0,0)
  70. '
  71. DO
  72.   IF acc!
  73.     ~EVNT_MESAG(nachricht%(0))
  74.   ENDIF
  75.   IF MENU(1)=40 OR (NOT acc!)
  76.   error_resume_ziel:                       ! Ein RESUME macht hier weiter
  77.     @main
  78.     IF windup_count&<>0
  79.       ALERT 3,"WIND_UPDATE-Fehler: "+STR$(windup_count&),1," OK ",dummy&
  80.     ENDIF
  81.   ENDIF
  82.   '
  83.   EXIT IF NOT acc!
  84. LOOP
  85. '
  86. @rsc_ausgang                  ! aus die Maus
  87. '
  88. ' ##########################################################################
  89. '
  90. PROCEDURE init
  91.   '
  92.   LOCAL sysbase%
  93.   '
  94.   ' --- mach mir die Maus
  95.   @div_maus
  96.   ' ~GRAF_MOUSE(255,VARPTR(glb_disc$))
  97.   DEFMOUSE glb_disc$
  98.   '
  99.   ' --- einige "Konstanten" :
  100.   glb_ok$=" OK "                           ! Button-Text
  101.   glb_cancel$="Abbruch"
  102.   '
  103.   ' --- Dateien zu TERM2000:
  104.   glb_rsc_file$="PSION_FT.RSC"
  105.   glb_info_file$=path$+"PSION_FT.INF"            ! Info-Datei
  106.   '
  107.   ' --- die RSC-Datei laden
  108.   @rsc_data
  109.   @rsc_init
  110.   '
  111. RETURN
  112. > PROCEDURE main
  113.   '
  114.   @info_load                    ! Info-Datei lesen
  115.   '
  116.   @main_dialog                ! Dialog
  117.   '
  118.   @info_save                    ! Info_Datei sichern
  119.   '
  120. RETURN
  121. ' #########################################################################
  122. ' e_ Empfangs-  s_ Senderoutinen
  123. ' ----------------------------------------------------------------------------
  124. > PROCEDURE empfangen
  125.   '
  126.   ' Daten werden vom Sharp empfangen
  127.   '
  128.   LOCAL e_ch&                            ! empfangenes Zeichen
  129.   LOCAL e_count%
  130.   LOCAL e_file$                          ! Pfad u. Name Zieldatei
  131.   '
  132.   ' --- Empfangspuffer berprfen
  133.   i%=0
  134.   IF INP?(1)                         ! wenn Zeichen anliegt
  135.     alert$="Im Empfangspuffer befinden|sich noch einige Zeichen!"
  136.     alert$=alert$+"|Soll der Puffer gel”scht|werden?"
  137.     ALERT 2,alert$,1," JA |NEIN",ret%
  138.     IF ret%=1
  139.       WHILE INP?(1)
  140.         INC i%
  141.         VOID INP(1)
  142.         message(STR$(i%),TRUE)
  143.       WEND
  144.       ALERT 1,"Sollte ab jetzt Empfang|nicht mehr m”glich sein,|bitte booten!",1,glb_ok$,dummy|
  145.       ALERT 1,"Es ist halt nur|'ne Testversion!",1,"Sorry",dummy|
  146.     ENDIF
  147.   ENDIF
  148.   '
  149.   glb_undo!=FALSE                        ! kein Abbruch
  150.   '
  151.   f_msg$="Datei empfangen"
  152.   @fileselect(f_msg$,path$+"*.*","",e_file$)  ! Zieldatei ausw„hlen
  153.   ' FILESELECT #f_msg$,"path$+*.*","",e_file$  ! Zieldatei ausw„hlen
  154.   IF e_file$<>"" AND RIGHT$(e_file$,1)<>"\"    ! nicht Abbruch gew„hlt
  155.     '
  156.     OPEN "i",#1,"STD:"                    ! serielle Schnittstelle ”ffnen
  157.     '
  158.     OPEN "o",#2,e_file$                  ! Datei auf Disk ”ffnen (schreiben)
  159.     e_ch&=0                              ! Zeichenvariable initialisieren
  160.     '
  161.     ON MENU KEY GOSUB div_undo             ! Abfrage der UNDO-Taste
  162.     '
  163.     ~GRAF_MOUSE(255,VARPTR(glb_disc$))             ! Biene
  164.     e_count%=0                           ! Zeichenz„hler
  165.     '
  166.     ' --- TimeOut fr erstes Zeichen
  167.     t%=TIMER
  168.     i&=0
  169.     DO
  170.       '
  171.       ON MENU                            ! Ereignisabfrage f. UNDO-Taste
  172.       EXIT IF glb_undo!=TRUE                 ! Abbruch durch Benutzer
  173.       IF INP?(1)                         ! wenn Zeichen anliegt
  174.         ' --- TimeOut neu starten
  175.         t%=TIMER
  176.         '
  177.         e_ch&=INP(#1)                    !   Zeichen in Variable in%
  178.         '
  179.         PRINT #2;CHR$(e_ch&);      !   Zeichen in Datei schreiben
  180.         '
  181.         INC i&
  182.         IF i&>49
  183.           msg$=STR$(e_count%)+" Bytes empfangen"
  184.           message(msg$,TRUE)
  185.           i&=0
  186.         ENDIF
  187.         '
  188.         INC e_count%
  189.         '
  190.       ENDIF
  191.       '
  192.       time%=(TIMER-t%)/200
  193.       ' TimeOut nach 10 Sekunden
  194.       IF time%>=10
  195.         timeout!=TRUE
  196.       ELSE
  197.         timeout!=FALSE
  198.       ENDIF
  199.       EXIT IF timeout!=TRUE
  200.       '
  201.     LOOP
  202.     '
  203.     CLOSE                                ! Kanal 1 und 2 schliessen
  204.     ~GRAF_MOUSE(0,0)                           ! Pfeil
  205.     '
  206.     IF timeout!=TRUE
  207.       m_msg$="Abbruch nach Timeout!"
  208.       message(m_msg$,TRUE)
  209.       ~EVNT_TIMER(1000)
  210.     ENDIF
  211.     '
  212.     IF glb_undo!=FALSE
  213.       m_msg$=STR$(e_count%)+" Zeichen empfangen."
  214.     ELSE
  215.       m_msg$="Empfang abgebrochen !"
  216.     ENDIF
  217.     message(m_msg$,FALSE)
  218.     '
  219.   ENDIF
  220.   '
  221. RETURN
  222. > PROCEDURE senden
  223.   '
  224.   ' Daten werden zum Sharp gesendet
  225.   '
  226.   LOCAL s_c&                             ! zu sendendes Zeichen
  227.   LOCAL s_file$                          ! Pfad u. Name fr Zieldatei
  228.   LOCAL s_count%
  229.   '
  230.   glb_undo!=FALSE                        ! kein Abbruch durch UNDO-Taste
  231.   glb_error!=FALSE                       ! kein Abbruch durch illegales Zeichen
  232.   '
  233.   f_msg$="Datei senden"
  234.   @fileselect(f_msg$,path$+"*.*","",s_file$)  ! Quelldatei ausw„hlen
  235.   ' FILESELECT #f_msg$,path$+"*.*","",s_file$  ! Quelldatei ausw„hlen
  236.   file_exist(s_file$,ret!)
  237.   IF s_file$<>"" AND ret!=TRUE      ! Abbruch gew„hlt ?
  238.     '
  239.     ' beg_update
  240.     '
  241.     ON MENU KEY GOSUB div_undo             ! Abfrage der UNDO-Taste
  242.     '
  243.     ' so muž laut Atari die Dateil„nge ermittelt werden
  244.     OPEN "i",#2,s_file$
  245.     filelen%=LOF(#2)
  246.     CLOSE #2
  247.     '
  248.     '    OPEN "",#1,"AUX:"                    ! serielle Schnittstelle ”ffnen
  249.     OPEN "i",#2,s_file$
  250.     '
  251.     ~GRAF_MOUSE(255,VARPTR(glb_disc$))                           ! Biene
  252.     '
  253.     t%=TIMER
  254.     s_count%=0
  255.     i&=0
  256.     REPEAT
  257.       ON MENU                            ! Ereignisabfrage ( fr UNDO )
  258.       EXIT IF glb_undo!=TRUE             ! Abbruch durch Benutzer
  259.       '
  260.       IF OUT?(1)
  261.         ' --- TimeOut neu starten
  262.         t%=TIMER
  263.         '
  264.         s_c&=INP(#2)
  265.         ~BIOS(3,1,s_c&)
  266.         '
  267.         INC i&
  268.         IF i&>49
  269.           msg$=STR$(s_count%)+" Bytes gesendet"
  270.           message(msg$,TRUE)
  271.           i&=0
  272.         ENDIF
  273.         '
  274.         INC s_count%
  275.       ENDIF
  276.       '
  277.       time%=(TIMER-t%)/200
  278.       ' TimeOut nach 10 Sekunden
  279.       EXIT IF time%>=10
  280.       '
  281.     UNTIL s_count%=filelen%
  282.     '
  283.     CLOSE                             ! Kanal 1 und 2 schliessen
  284.     ~GRAF_MOUSE(0,0)                        ! Pfeil
  285.     '
  286.     IF glb_undo!=FALSE      ! wenn alles in Ordnung ist
  287.       m_msg$=STR$(s_count%)+" Zeichen gesendet."
  288.     ELSE
  289.       m_msg$="šbertragung abgebrochen !!!"
  290.     ENDIF
  291.     message(m_msg$,FALSE)
  292.     '
  293.     ' end_update
  294.     '
  295.   ENDIF
  296.   '
  297. RETURN
  298. > PROCEDURE rs_232
  299.   '
  300.   ' Setzen der Parameter, falls diese gesetzt werden sollen
  301.   '
  302.   LOCAL baud$
  303.   '
  304.   VOID XBIOS(15,glb_baud&,2,-1,-1,-1,-1)
  305.   SELECT glb_baud&
  306.   CASE 0
  307.     baud$="19200"
  308.   CASE 1
  309.     baud$="9600"
  310.   CASE 2
  311.     baud$="4800"
  312.   CASE 3
  313.     baud$="3600"
  314.   CASE 4
  315.     baud$="2400"
  316.   CASE 5
  317.     baud$="2000"
  318.   CASE 6
  319.     baud$="1800"
  320.   CASE 7
  321.     baud$="1200"
  322.   CASE 8
  323.     baud$="600"
  324.   CASE 9
  325.     baud$="300"
  326.   CASE 10
  327.     baud$="200"
  328.   CASE 11
  329.     baud$="150"
  330.   CASE 12
  331.     baud$="134"
  332.   CASE 13
  333.     baud$="110"
  334.   CASE 14
  335.     baud$="75"
  336.   CASE 15
  337.     baud$="50"
  338.   DEFAULT
  339.     ALERT 3,"Fehler bei Baudrateneinstellung",1,glb_ok$,dummy&
  340.     '  glb_baud&=glb_system&
  341.   ENDSELECT
  342.   '
  343.   ' die OB_-Funktionen lassen den Linker abstrzen !?!
  344.   '  CHAR{{OB_SPEC(glb_maindial_adr%,bbaud%)}}=baud$
  345.   ' primitiver Ersatz dafr
  346.   rsrc_obtxt_set(4,6,baud$)     ! Text-Object Nr. 4, L„nge 6 Zeichen
  347.   '
  348.   '
  349. RETURN
  350. > PROCEDURE div_undo
  351.   '
  352.   ' Wird w„hrend der šbertragung eine Taste gedrckt, so wird hier geprft,
  353.   ' ob es die UNDO-Taste war. Wenn ja, wird das Abbruch-Flag auf TRUE gesetzt.
  354.   '
  355.   IF HEX$(MENU(14)/&HFF)="61"            ! Scan-Code der Taste UNDO = H61
  356.     glb_undo!=TRUE
  357.   ELSE
  358.     glb_undo!=FALSE
  359.   ENDIF
  360.   '
  361. RETURN
  362. ' #### Functions ##########################################################
  363. > FUNCTION getdrv
  364.   '
  365.   IF acc!       ! _bootdev
  366.     RETURN DPEEK(&H446)+1
  367.   ELSE
  368.     RETURN GEMDOS(&H19)+1
  369.   ENDIF         ! akt. LW
  370. ENDFUNC
  371. > FUNCTION mfree
  372.   ' --- Freier Speicher in MB ---
  373.   RETURN GEMDOS(72,L:-1)/1024/1024
  374. ENDFUNC
  375. ' #########################################################################
  376. ' info_
  377. ' ---------------------------------------------------------------------------
  378. > PROCEDURE info_save
  379.   '
  380.   ' ~GRAF_MOUSE(255,VARPTR(glb_disc$))
  381.   DEFMOUSE glb_disc$
  382.   '
  383.   OPEN "o",#1,glb_info_file$
  384.   ' beg_update
  385.   PRINT #1,glb_baud&
  386.   ' end_update
  387.   CLOSE #1
  388.   '
  389.   ~GRAF_MOUSE(0,0)
  390.   '
  391. RETURN
  392. > PROCEDURE info_load
  393.   '
  394.   LOCAL info_ext$                        ! Datei-Extension
  395.   '
  396.   ' ~GRAF_MOUSE(255,VARPTR(glb_disc$))
  397.   DEFMOUSE glb_disc$
  398.   '
  399.   ' --- Default-Settings:
  400.   glb_baud&=1
  401.   '
  402.   ' --- .INF-Datei auswerten:
  403.   file_exist(glb_info_file$,f_exist!)
  404.   '
  405.   IF f_exist!
  406.     OPEN "i",#1,glb_info_file$
  407.     ' beg_update
  408.     INPUT #1,glb_baud&
  409.     ' end_update
  410.     CLOSE #1
  411.     '
  412.   ELSE
  413.     ALERT 1,"PSION_FT.INF nicht gefunden!|PSION-FT verwendet deshalb|die Standardeinstellungen.",1," OK ",dummy&
  414.   ENDIF
  415.   '
  416.   ' --- Und Baudrate einstellen
  417.   rs_232
  418.   '
  419.   ~GRAF_MOUSE(0,0)
  420.   '
  421. RETURN
  422. ' ############################################################################
  423. > PROCEDURE div_maus
  424.   ' --- Neue Mausdaten einlesen, Disc-Symbol als Mauszeiger
  425.   LOCAL div_i%,div_a%
  426.   '
  427.   RESTORE maus_daten
  428.   glb_disc$=MKI$(0)+MKI$(0)+MKI$(1)
  429.   glb_disc$=glb_disc$+MKI$(0)+MKI$(1)
  430.   FOR div_i%=1 TO 32
  431.     READ div_a%
  432.     glb_disc$=glb_disc$+MKI$(div_a%)
  433.   NEXT div_i%
  434.   glb_disc$=glb_disc$+CHR$(0)
  435.   '
  436. maus_daten:
  437.   DATA 65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535
  438.   DATA 65535,65535,65535,65535,65535,65529,65529,65535
  439.   DATA 65535,65535,65535,65535,65535,63519,64287,64287,64287,64287,30751,16382
  440.   '
  441. RETURN
  442. > PROCEDURE error
  443.   '
  444.   LOCAL ret|,error_a%,error_a$
  445.   '
  446.   ' *** Maus auf Pfeil
  447.   ~GRAF_MOUSE(0,0)
  448.   '
  449.   IF ERR=-13
  450.     ALERT 1,"Die Diskette ist|schreibgeschtzt!",1,glb_ok$,dummy&
  451.   ELSE
  452.     error_alert$="Schwerwiegender Fehler!|"
  453.     error_alert$=error_alert$+"Fehler Nummer: "+STR$(ERR)+"|"
  454.     VOID FRE(0)                            ! Garbage Collection
  455.     error_alert$=error_alert$+"Int. Speicher: "+STR$(FRE(0)\1024)+" kB"+"|"
  456.     error_alert$=error_alert$+"Ext. Speicher: "+STR$(INT(FN mfree))+" kB"
  457.     ALERT 3,error_alert$,1,glb_ok$,dummy|
  458.     '
  459.     '  error_a$="Fehler Nummer "+STR$(ERR)
  460.     ' ALERT 1,"Fehlerbeschreibung:|"+error_a$,1,glb_ok$,dummy|
  461.     '
  462.     ALERT 2,"Weiter im Programm ?",2,"ja|nein",ret|
  463.     IF ret|=1
  464.       ' --- Programm weiter ausfhren
  465.       ON ERROR GOSUB error                 ! n„chstes Mal wieder diese Prozedur
  466.       RESUME error_resume_ziel             ! weiter bei Anfang
  467.       '
  468.     ELSE
  469.       '
  470.       IF acc!
  471.         ~EVNT_TIMER(-1)                  ! ACC beendet man nicht
  472.       ELSE
  473.         @rsc_ausgang
  474.       ENDIF
  475.     ENDIF
  476.   ENDIF
  477.   '
  478. RETURN
  479. ' ###########################################################################
  480. > PROCEDURE rsc_ausgang
  481.   '
  482.   ' Programmende
  483.   '
  484.   '
  485.   IF NOT acc!
  486.     ' *****************
  487.     ~RSRC_FREE()
  488.     ' *****************
  489.     END
  490.   ELSE
  491.     DO
  492.       ~EVNT_TIMER(-1)
  493.     LOOP
  494.   ENDIF
  495.   '
  496. RETURN
  497. > PROCEDURE rsc_init
  498.   '
  499.   '
  500.   ' RSC erst im Applikationsverz. suchen
  501.   ret!=RSRC_LOAD(path$+glb_rsc_file$)
  502.   IF ret!=FALSE
  503.     ret!=RSRC_LOAD(glb_rsc_file$)
  504.     IF ret!=FALSE
  505.       ~FORM_ALERT(1,"[3][PSION-FT:|Resourcefile "+glb_rsc_file$+" |nicht gefunden!][Abbruch]")
  506.       IF acc!
  507.         DO
  508.           ~EVNT_TIMER(-1)
  509.         LOOP
  510.       ELSE
  511.         '
  512.         END
  513.         '
  514.       ENDIF
  515.     ENDIF
  516.   ENDIF
  517.   ~RSRC_GADDR(0,maindial%,glb_maindial_adr%)
  518.   ~RSRC_GADDR(0,help1%,glb_help_adr1%)
  519.   ~RSRC_GADDR(0,help2%,glb_help_adr2%)
  520.   ~RSRC_GADDR(0,help3%,glb_help_adr3%)
  521.   ~RSRC_GADDR(0,help4%,glb_help_adr4%)
  522.   ~RSRC_GADDR(0,iconbox%,glb_iconbox_adr%)
  523.   '
  524. RETURN
  525. ' ###########################################################################
  526. > PROCEDURE rsrc_obtxt_set(rsrc_o.%,rsrc_l.%,rsrc_t.$)
  527.   '
  528.   LOCAL rsrc_ad%,rsrc_ted%,rsrc_n%,rsrc_a%
  529.   ~RSRC_GADDR(2,rsrc_o.%,rsrc_ad%)
  530.   rsrc_ted%=LPEEK(rsrc_ad%)
  531.   FOR rsrc_n%=0 TO rsrc_l.%-1
  532.     rsrc_a%=ASC(MID$(rsrc_t.$,rsrc_n%+1,1))
  533.     POKE rsrc_ted%+rsrc_n%,rsrc_a%
  534.   NEXT rsrc_n%
  535. RETURN
  536. > FUNCTION rsrc_obstate_get(rsrc_o.%)
  537.   '
  538.   LOCAL rsrc_ad%
  539.   ~RSRC_GADDR(1,rsrc_o.%,rsrc_ad%)
  540.   RETURN DPEEK(rsrc_ad%+10)
  541. ENDFUNC
  542. ' ######### Dialoge
  543. > PROCEDURE main_dialog
  544.   '
  545.   LOCAL rsc_object%,rsc_object_h%
  546.   LOCAL ret|
  547.   LOCAL on&,off&,dis&
  548.   '
  549.   ' --- Anfangswerte setzen:
  550.   '
  551.   ' --- Button-Flags
  552.   off&=&H0
  553.   on&=off&+1
  554.   dis&=off&+8
  555.   '
  556.   message("",FALSE)
  557.   show_or_hide_box(glb_maindial_adr%,0)   ! Box 1 zeichnen
  558.   '
  559.   REPEAT
  560.     '
  561.     ~OBJC_DRAW(glb_maindial_adr%,msg_box%,2,glb_x1&,glb_y1&,glb_w1&,glb_h1&)  ! Formular 1 zeichnen
  562.     '
  563.     rsc_object%=FORM_DO(glb_maindial_adr%,0)      ! Formular 1 behandeln
  564.     m_msg$=""
  565.     '
  566.     SELECT rsc_object%
  567.     CASE bfhelp%,btxd%,brxd%,bmkdir%,bshow%,bdelete%,bverify%
  568.       '
  569.       show_or_hide_box(glb_maindial_adr%,1)   ! Box 1 l”schen
  570.       '
  571.       SELECT rsc_object%
  572.       CASE bfhelp%
  573.         show_help
  574.       CASE btxd%
  575.         senden
  576.       CASE brxd%
  577.         empfangen
  578.         '
  579.       CASE bmkdir%
  580.         f_msg$="Ordner anlegen"
  581.         @fileselect(f_msg$,path$+"*.*","",file$)  ! Zieldatei ausw„hlen
  582.         IF file$<>"" AND RIGHT$(file$)<>"\"
  583.           @file_exist(file$,ret!)
  584.           IF NOT ret!
  585.             MKDIR file$
  586.             m_msg$="Ordner wurde angelegt."
  587.           ELSE
  588.             m_msg$="Ordner NICHT angelegt."
  589.           ENDIF
  590.         ENDIF
  591.       CASE bshow%
  592.         f_msg$="Datei Info"
  593.         @fileselect(f_msg$,path$+"*.*","",file$)  ! Zieldatei ausw„hlen
  594.         IF file$<>""
  595.           @file_exist(file$,ret!)
  596.           IF ret!
  597.             ' so muž laut Atari die Dateil„nge ermittelt werden
  598.             OPEN "i",#1,file$
  599.             filelen%=LOF(#1)
  600.             CLOSE #1
  601.             '
  602.             m_msg$="Dateil„nge: "+STR$(filelen%)+" Bytes"
  603.             '
  604.           ENDIF
  605.         ENDIF
  606.       CASE bdelete%
  607.         f_msg$="Datei l”schen"
  608.         @fileselect(f_msg$,path$+"*.*","",file$)  ! Zieldatei ausw„hlen
  609.         IF file$<>""
  610.           @file_exist(file$,ret!)
  611.           IF ret!
  612.             KILL file$
  613.             m_msg$="Datei wurde gel”scht."
  614.           ELSE
  615.             m_msg$="Datei nicht gel”scht."
  616.           ENDIF
  617.         ENDIF
  618.       CASE bverify%
  619.         f_msg$="Datei vergleichen"
  620.         @fileselect(f_msg$,path$+"*.*","",file$)  ! Zieldatei ausw„hlen
  621.         m_msg$="Gibt's noch nicht!"
  622.         '
  623.       ENDSELECT
  624.       '
  625.       show_or_hide_box(glb_maindial_adr%,0)   ! Box 1 zeichnen
  626.       '
  627.     CASE binfo%
  628.       '
  629.       alert$="Dies ist eine Test-Version!|"
  630.       alert$=alert$+"Erwarten Sie also nix! :-("
  631.       ALERT 1,alert$,1,glb_ok$,dummy&
  632.       '
  633.     CASE bup%
  634.       '
  635.       IF glb_baud&>0
  636.         DEC glb_baud&
  637.       ENDIF
  638.       rs_232
  639.       ~OBJC_DRAW(glb_maindial_adr%,bbaud%,2,glb_x1&,glb_y1&,glb_w1&,glb_h1&)  ! Formular 1 zeichnen
  640.       ~OBJC_DRAW(glb_maindial_adr%,bup%,2,glb_x1&,glb_y1&,glb_w1&,glb_h1&)  ! Formular 1 zeichnen
  641.       '
  642.     CASE bdown%
  643.       '
  644.       IF glb_baud&<15
  645.         INC glb_baud&
  646.       ENDIF
  647.       rs_232
  648.       ~OBJC_DRAW(glb_maindial_adr%,bbaud%,2,glb_x1&,glb_y1&,glb_w1&,glb_h1&)  ! Formular 1 zeichnen
  649.       ~OBJC_DRAW(glb_maindial_adr%,bdown%,2,glb_x1&,glb_y1&,glb_w1&,glb_h1&)  ! Formular 1 zeichnen
  650.       '
  651.     CASE bfcancel%
  652.       '
  653.     DEFAULT
  654.       ALERT 1,"Diese Funktion ist noch|nicht implementiert!",1,glb_ok$,dummy|
  655.     ENDSELECT
  656.     '
  657.     message(m_msg$,FALSE)
  658.     '
  659.     ' --- Exit-Button
  660.     ~OBJC_OFFSET(glb_maindial_adr%,0,glb_x1&,glb_y1&) !Box kann verschoben sein
  661.     IF rsc_object%=binfo%
  662.       ' dieses ist Shadowed+Outlined
  663.       ~OBJC_CHANGE(glb_maindial_adr%,rsc_object%,0,glb_x1&,glb_y1&,glb_w1&,glb_h1&,48,1)
  664.     ELSE
  665.       ~OBJC_CHANGE(glb_maindial_adr%,rsc_object%,0,glb_x1&,glb_y1&,glb_w1&,glb_h1&,0,1)
  666.     ENDIF
  667.     '
  668.   UNTIL rsc_object%=bfcancel%
  669.   '
  670.   show_or_hide_box(glb_maindial_adr%,1)   ! Box 1 l”schen
  671.   '
  672. RETURN
  673. > PROCEDURE show_help
  674.   '
  675.   help_1
  676.   '
  677. RETURN
  678. > PROCEDURE help_1
  679.   '
  680.   show_or_hide_box(glb_help_adr1%,2)          !Box 2 zeicnen
  681.   '
  682.   rsc_object_h%=FORM_DO(glb_help_adr1%,0)  ! Formular behandeln
  683.   ~OBJC_OFFSET(glb_help_adr1%,0,glb_x2&,glb_y2&) !Box kann verschoben sein
  684.   ~OBJC_CHANGE(glb_help_adr1%,rsc_object_h%,0,glb_x2&,glb_y2&,glb_w2&,glb_h2&,0,1)
  685.   '
  686.   show_or_hide_box(glb_help_adr1%,3)               ! Box 2 l”schen
  687.   '
  688.   SELECT rsc_object_h%
  689.   CASE bforw1%
  690.     help_2
  691.   CASE bback1%
  692.   ENDSELECT
  693.   '
  694. RETURN
  695. > PROCEDURE help_2
  696.   '
  697.   show_or_hide_box(glb_help_adr2%,2)          !Box 2 zeicnen
  698.   '
  699.   rsc_object_h%=FORM_DO(glb_help_adr2%,0)  ! Formular behandeln
  700.   ~OBJC_OFFSET(glb_help_adr2%,0,glb_x2&,glb_y2&) !Box kann verschoben sein
  701.   ~OBJC_CHANGE(glb_help_adr2%,rsc_object_h%,0,glb_x2&,glb_y2&,glb_w2&,glb_h2&,0,1)
  702.   '
  703.   show_or_hide_box(glb_help_adr2%,3)               ! Box 2 l”schen
  704.   '
  705.   SELECT rsc_object_h%
  706.   CASE bforw1%
  707.     help_3
  708.   CASE bback1%
  709.     help_1
  710.   ENDSELECT
  711.   '
  712. RETURN
  713. > PROCEDURE help_3
  714.   '
  715.   show_or_hide_box(glb_help_adr3%,2)          !Box 2 zeicnen
  716.   '
  717.   rsc_object_h%=FORM_DO(glb_help_adr3%,0)  ! Formular behandeln
  718.   ~OBJC_OFFSET(glb_help_adr3%,0,glb_x2&,glb_y2&) !Box kann verschoben sein
  719.   ~OBJC_CHANGE(glb_help_adr3%,rsc_object_h%,0,glb_x2&,glb_y2&,glb_w2&,glb_h2&,0,1)
  720.   '
  721.   show_or_hide_box(glb_help_adr3%,3)               ! Box 2 l”schen
  722.   '
  723.   SELECT rsc_object_h%
  724.   CASE bforw1%
  725.     help_4
  726.   CASE bback1%
  727.     help_2
  728.   ENDSELECT
  729.   '
  730. RETURN
  731. > PROCEDURE help_4
  732.   '
  733.   show_or_hide_box(glb_help_adr4%,2)          !Box 2 zeicnen
  734.   '
  735.   rsc_object_h%=FORM_DO(glb_help_adr4%,0)  ! Formular behandeln
  736.   ~OBJC_OFFSET(glb_help_adr4%,0,glb_x2&,glb_y2&) !Box kann verschoben sein
  737.   ~OBJC_CHANGE(glb_help_adr4%,rsc_object_h%,0,glb_x2&,glb_y2&,glb_w2&,glb_h2&,0,1)
  738.   '
  739.   show_or_hide_box(glb_help_adr4%,3)               ! Box 2 l”schen
  740.   '
  741.   SELECT rsc_object_h%
  742.   CASE bforw1%
  743.     '
  744.   CASE bback1%
  745.     help_3
  746.   ENDSELECT
  747.   '
  748. RETURN
  749. '
  750. > PROCEDURE show_iconbox
  751.   '
  752.   ' Bestimmt neue Gr”že der Box aufgrund der Icongr”že (aufl”sungsabh„ngig!)
  753.   ' und gibt diese samt Icon unten rechts aus
  754.   '
  755.   ' Das Icon als erstes ausgeben, da es sonst bei geringer Aufl”sung
  756.   ' die Hauptdialogbox verdecken k”nnte
  757.   '
  758.   LOCAL lx&,ly&         ! neue Koordinaten
  759.   '
  760.   ' muž das sein? Kann aber wohl nicht schaden
  761.   ~FORM_CENTER(glb_iconbox_adr%,glb_x3&,glb_y3&,glb_w3&,glb_h3&)
  762.   '
  763.   ' --- Adresse der ICONBLK-Struktur holen
  764.   ~RSRC_GADDR(1,t5obj%+icon%,glb_icon_adr%)
  765.   ' --- Koordinaten ermitteln
  766.   ~FORM_CENTER(glb_icon_adr%,icon_x&,icon_y&,icon_w&,icon_h&)
  767.   '
  768.   ' --- Iconbox verschieben und ausgeben
  769.   lx&=desk_w&+desk_x&-icon_w&-16  ! neue x-Koordiante fr Icon bestimmen
  770.   ly&=desk_h&+desk_y&-icon_h&-16  ! neue y-Koordiante fr Icon bestimmen
  771.   DPOKE glb_icon_adr%+16,lx&
  772.   DPOKE glb_icon_adr%+18,ly&
  773.   '
  774.   icon_x&=lx&
  775.   icon_y&=ly&
  776.   ~FORM_DIAL(0,0,0,0,0,icon_x&,icon_y&,icon_w&,icon_h&) ! Bildschirmbereich reservieren
  777.   ~OBJC_DRAW(glb_icon_adr%,0,2,icon_x&,icon_y&,icon_w&,icon_h&)  ! Object ausgeben
  778.   '
  779. RETURN
  780. > PROCEDURE hide_iconbox
  781.   '
  782.   ~FORM_DIAL(3,0,0,0,0,icon_x&,icon_y&,icon_w&,icon_h&) ! Box weg
  783.   '
  784. RETURN
  785. > PROCEDURE show_or_hide_box(adr.%,mode.&)
  786.   ' mode 0 : Hauptbox zeichen
  787.   ' mode 1 : Hauptbox l”schen
  788.   ' mode 2 : eine Hilfebox zeichen
  789.   ' mode 3 : eine Hilfebox l”schen
  790.   ' mode 4 : Copyrightbox zeichnen
  791.   ' mode 5 : Copyrightbox zeichnen
  792.   ' -------------------------------------------------------------------------
  793.   ' um Probleme zu vermeiden, alle WIND_UPDATE-abh„ngigen Grafikausgaben
  794.   ' in dieser PROC zwischen BEG_UPDATE und END_UPDATE durchfhren
  795.   ' -------------------------------------------------------------------------
  796.   '
  797.   ~WIND_GET(0,4,desk_x&,desk_y&,desk_w&,desk_h&)! Ausmaže des Desktop holen (WIND 0)
  798.   '
  799.   '
  800.   ' wann immer ein Dialog ausgegeben wird...
  801.   SELECT mode.&
  802.   CASE 0,2,4
  803.     '    beg_update
  804.     show_iconbox
  805.   ENDSELECT
  806.   '
  807.   '
  808.   SELECT mode.&
  809.   CASE 0        ! Box 1 zeichnen
  810.     '
  811.     ~FORM_CENTER(adr.%,glb_x1&,glb_y1&,glb_w1&,glb_h1&)
  812.     ~FORM_DIAL(0,0,0,0,0,glb_x1&,glb_y1&,glb_w1&,glb_h1&) ! Bildschirmbereich reservieren
  813.     beg_update
  814.     ~OBJC_DRAW(adr.%,0,2,glb_x1&,glb_y1&,glb_w1&,glb_h1&)  ! Formular 1 zeichnen
  815.     '
  816.   CASE 1        ! Box 1 l”schen
  817.     ~FORM_CENTER(adr.%,glb_x1&,glb_y1&,glb_w1&,glb_h1&)
  818.     ~FORM_DIAL(3,0,0,0,0,glb_x1&,glb_y1&,glb_w1&,glb_h1&)
  819.     end_update
  820.     '
  821.   CASE 2        ! Box 2 zeichen
  822.     '
  823.     ~FORM_CENTER(adr.%,glb_x2&,glb_y2&,glb_w2&,glb_h2&)
  824.     ~FORM_DIAL(0,0,0,0,0,glb_x2&,glb_y2&,glb_w2&,glb_h2&)
  825.     beg_update
  826.     ~OBJC_DRAW(adr.%,0,2,glb_x2&,glb_y2&,glb_w2&,glb_h2&)
  827.   CASE 3        ! Box 2 l”schen
  828.     ~FORM_CENTER(adr.%,glb_x2&,glb_y2&,glb_w2&,glb_h2&)
  829.     ~FORM_DIAL(3,0,0,0,0,glb_x2&,glb_y2&,glb_w2&,glb_h2&)   ! alte Dialogbox weg
  830.     end_update
  831.     '
  832.     ' CASE is hier nich:
  833.     '           ! Box 3 ist das PSION-FT-Icon
  834.     '
  835.   CASE 4        ! Box 4 zeichen
  836.     '
  837.     ~FORM_CENTER(adr.%,glb_x4&,glb_y4&,glb_w4&,glb_h4&)
  838.     ~FORM_DIAL(0,0,0,0,0,glb_x4&,glb_y4&,glb_w4&,glb_h4&)
  839.     ' ~WIND_GET(0,4,desk_x&,desk_y&,desk_w&,desk_h&)! Ausmaže des Desktop holen (WIND 0)
  840.     ' ~FORM_DIAL(0,0,0,0,0,desk_x&,desk_y&,desk_w&,desk_h&)
  841.     ~OBJC_DRAW(adr.%,0,7,glb_x4&,glb_y4&,glb_w4&,glb_h4&)
  842.     '
  843.     '
  844.   CASE 5        ! Box 4 l”schen
  845.     ~FORM_CENTER(adr.%,glb_x4&,glb_y4&,glb_w4&,glb_h4&)
  846.     ~FORM_DIAL(3,0,0,0,0,glb_x4&,glb_y4&,glb_w4&,glb_h4&)   ! alte Dialogbox weg
  847.     '
  848.   ENDSELECT
  849.   '
  850.   '
  851.   ' wann immer ein Dialog entfernt wird...
  852.   SELECT mode.&
  853.   CASE 1,3,5
  854.     hide_iconbox
  855.     '
  856.     '    end_update
  857.     '
  858.   ENDSELECT
  859.   '
  860.   '
  861. RETURN
  862. '
  863. > PROCEDURE message(msg.$,draw!)
  864.   '
  865.   LOCAL adr%
  866.   '
  867.   ' Die Message-Box bietet 30 Zeichen Text
  868.   rsrc_obtxt_set(5,30,msg.$)
  869.   IF draw!
  870.     ~OBJC_DRAW(glb_maindial_adr%,msg_box%,2,glb_x1&,glb_y1&,glb_w1&,glb_h1&)  ! Formular 1 zeichnen
  871.   ENDIF
  872. RETURN
  873. '
  874. > PROCEDURE beg_update
  875.   ~WIND_UPDATE(1)                     ! BEG_UPDATE
  876.   ~WIND_UPDATE(3)                     ! BEG_MCRTL: die Maus ist jetzt meine
  877.   '
  878.   INC windup_count&
  879.   '  debug(STR$(windup_count&))
  880.   '
  881.   IF windup_count&=2
  882.     ALERT 3,"Fehler (+) bei WIND_UPDATE!",1,glb_ok$,dummy&
  883.   ENDIF
  884. RETURN
  885. > PROCEDURE end_update
  886.   ~WIND_UPDATE(2)                     ! END_MCRTL: ich gebe die Maus frei
  887.   ~WIND_UPDATE(0)                     ! END_UPDATE
  888.   '
  889.   DEC windup_count&
  890.   ' debug(STR$(windup_count&))
  891.   '
  892.   IF windup_count&=-1
  893.     ALERT 3,"Fehler (-) bei WIND_UPDATE!",1,glb_ok$,dummy&
  894.   ENDIF
  895. RETURN
  896. '
  897. > PROCEDURE file_exist(file.$,VAR ret!)
  898.   '
  899.   ' die GFA-Funktion EXIST kann nicht in ACC's verwendet werden:
  900.   ' --> nach Endes des ACC und Start eines PRG: Systemabsturz :-(
  901.   '
  902.   LOCAL handle&,f%
  903.   '
  904.   ' --- mit Fopen die Datei ”ffnen
  905.   file.$=file.$+CHR$(0)
  906.   f%=VARPTR(file.$)
  907.   handle&=GEMDOS(61,L:f%,W:0)
  908.   '  ALERT 1,STR$(handle&),1,"OK",d
  909.   IF handle&>=0
  910.     ' --- wichtig: ge”ffnete Datei wieder schliežen, also das Handle freigeben
  911.     ~GEMDOS(62,handle&)
  912.     ret!=TRUE
  913.   ELSE
  914.     ret!=FALSE
  915.   ENDIF
  916. RETURN
  917. '
  918. > PROCEDURE fileselect(title$,inpath$,insel$,VAR b$)
  919.   ' Fileselect-Aufruf fr TOS 1.4
  920.   ' FILESELECT #title$,inpath$,insel$,b$ !ab GFA-Basic 3.04
  921.   '
  922.   '  ~FORM_DIAL(0,0,0,0,0,desk_x&,desk_y&,desk_w&,desk_h&)
  923.   '
  924.   inpath$=inpath$+CHR$(0)+SPACE$(37)
  925.   insel$=insel$+CHR$(0)+SPACE$(12)
  926.   title$=LEFT$(title$,30)+CHR$(0)
  927.   DPOKE GCONTRL+2,0
  928.   DPOKE GCONTRL+4,2
  929.   DPOKE GCONTRL+6,3
  930.   DPOKE GCONTRL+8,0
  931.   ADDRIN(0)=VARPTR(inpath$)
  932.   ADDRIN(1)=VARPTR(insel$)
  933.   ADDRIN(2)=VARPTR(title$)
  934.   ' SHOWM
  935.   IF WORD{{GB+4}}>=&H130 AND WORD{{GB+4}}<>&H200 ! global(0)
  936.     '          ! BETA-TOS             ! GEM 2.0
  937.     ' ist aber in einem Disketten-TOS falsch angegeben
  938.     $U
  939.     GEMSYS 91   ! FSEL_EXINPUT()
  940.     $U
  941.   ELSE
  942.     $U
  943.     GEMSYS 90   ! FSEL_INPUT()      bis Blitter-TOS 1.2
  944.     $U
  945.   ENDIF
  946.   inpath$=CHAR{V:inpath$}
  947.   insel$=CHAR{V:insel$}
  948.   IF GINTOUT(1)=1 ! OK-Button
  949.     b$=UPPER$(LEFT$(inpath$,INSTR(inpath$,"*")-1)+insel$)
  950.   ELSE
  951.     b$=""
  952.   ENDIF
  953.   '
  954.   '  ~FORM_DIAL(3,0,0,0,0,desk_x&,desk_y&,desk_w&,desk_h&)
  955.   '
  956.   ' SHOWM
  957. RETURN
  958. > PROCEDURE debug(a.$)
  959.   ALERT 1,a.$,1,"Debug",x&
  960. RETURN
  961. '
  962. > PROCEDURE rsc_data
  963.   '
  964.   ' Baumindizes
  965.   '
  966.   t0obj%=0
  967.   t1obj%=17
  968.   t2obj%=39
  969.   t3obj%=61
  970.   t4obj%=83
  971.   t5obj%=105
  972.   '
  973.   ' resource set indices for PSION_FT
  974.   '
  975.   LET maindial%=0 ! form/dialog
  976.   LET bfcancel%=1 ! BUTTON in tree MAINDIAL
  977.   LET bfhelp%=3 ! BOXTEXT in tree MAINDIAL
  978.   LET binfo%=4 ! BOXTEXT in tree MAINDIAL
  979.   LET bdown%=5 ! BOXTEXT in tree MAINDIAL
  980.   LET bup%=6 ! BOXTEXT in tree MAINDIAL
  981.   LET bbaud%=7 ! BOXTEXT in tree MAINDIAL
  982.   LET btxd%=8 ! BUTTON in tree MAINDIAL
  983.   LET brxd%=9 ! BUTTON in tree MAINDIAL
  984.   LET bshow%=12 ! BUTTON in tree MAINDIAL
  985.   LET bdelete%=13 ! BUTTON in tree MAINDIAL
  986.   LET bverify%=14 ! BUTTON in tree MAINDIAL
  987.   LET bmkdir%=15 ! BUTTON in tree MAINDIAL
  988.   LET msg_box%=16 ! BOXTEXT in tree MAINDIAL
  989.   '
  990.   LET help1%=1 ! form/dialog
  991.   LET bend1%=1 ! BUTTON in tree HELP1
  992.   LET bback1%=20 ! BUTTON in tree HELP1
  993.   LET bforw1%=21 ! BUTTON in tree HELP1
  994.   '
  995.   LET help2%=2 ! form/dialog
  996.   LET bend2%=1 ! BUTTON in tree HELP2
  997.   LET bback2%=20 ! BUTTON in tree HELP2
  998.   LET bforw2%=21 ! BUTTON in tree HELP2
  999.   '
  1000.   LET help3%=3 ! form/dialog
  1001.   LET bend3%=1 ! BUTTON in tree HELP3
  1002.   LET bback3%=20 ! BUTTON in tree HELP3
  1003.   LET bforw3%=21 ! BUTTON in tree HELP3
  1004.   '
  1005.   LET help4%=4 ! form/dialog
  1006.   LET bend4%=1 ! BUTTON in tree HELP4
  1007.   LET bback4%=20 ! BUTTON in tree HELP4
  1008.   LET bforw4%=21 ! BUTTON in tree HELP4
  1009.   '
  1010.   LET iconbox%=5 ! form/dialog
  1011.   LET icon%=1 ! ICON in tree ICONBOX
  1012.   '
  1013.   '
  1014. RETURN
  1015. '
  1016.